因為之後的題目會用到,所以這邊先安裝一下庫,以下示範為在wins系統安裝的指令
pip install pycryptodome
pip install gmpy2
pip install pwntools
如果在安裝pycryptodome時遇到問題,可以試試
pip uninstall crypto
pip uninstall pycryptodome
pip install pycryptodome
https://cryptohack.org/courses/intro/enc4/
from Crypto.Util.number import # 從 Crypto.Util.number 模組中引入所有函數和工具
bytes_to_long() #將位元組序列(bytes)轉換為長整數(long integer)
long_to_bytes() #將長整數(long integer)轉換為位元組序列(bytes)
from Crypto.Util.number import *
c=11515195063862318899931685488813747395775516287289682636499965282714637259206269
print(long_to_bytes(c))
crypto{3nc0d1n6_4ll_7h3_w4y_d0wn}
也就是(crypto{encoding_all_the_way_down})
在寫xor的題目前,先來了解一下xor。
XOR(Exclusive OR 異或)是一種位元運算,常用於密碼學和資料處理。
⊕
或 ^
。0 ⊕ 0 = 0
1 ⊕ 0 = 1
0 ⊕ 1 = 1
1 ⊕ 1 = 0
。A ⊕ B = B ⊕ A
A ⊕ (B ⊕ C) = (A ⊕ B) ⊕ C
A ⊕ 0 = A
A ⊕ A = 0
(A ⊕ B) ⊕ B = A
1010
,密鑰為 1100
:
1010 ⊕ 1100 = 0110
0110 ⊕ 1100 = 1010
https://cryptohack.org/courses/intro/xor0/
from pwn import xor # 從 pwntools 庫中導入了 xor 函數
#方法一:
from pwn import xor
result=xor('label',13) #使用pwn.xor會得到bytes型別的結果
print(f"crypto{{{result.decode()}}}") #decode():將bytes轉string #encode():轉為bytes
#bytes型別: 整數序列,每個整數介於0-255(8bits)
#方法二:
result = ''.join(chr(ord(char) ^ 13) for char in 'label')
print(f"crypto{{{result}}}")
crypto{aloha}
今天查詢並了解了xor,剩下的xor題目明天就可以直接解了。